草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 在派生对象到基类的 "this"指针上使用 static_cast 的问题

这是取自EffectiveC++3ed的一个例子,它说如果这样使用static_cast,对象的基础部分被复制,并且调用从该部分调用。我想了解幕后发生的事情,有人会帮忙吗?classWindow{//baseclasspublic:virtualvoidonResize(){}//baseonResizeimpl};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thi

c++ - 从 C++ 中的空基类继承

我想创建一个名为“Node”的空基类,然后从中派生其他类,例如“DecisionNode”和“Leaf”。这样做很有意义,因此我可以利用多态性将这些不同类型的节点传递给方法,而无需在编译时知道将传递给方法的内容,但每个派生类都不共享任何状态或方法。我认为最好的实现方法是使构造函数成为纯虚拟的,而无需在基类中创建额外的纯虚拟方法(这会增加困惑)。因此,在该类的头文件“Node.h”中,我写道:classNode{private:virtualNode();};在“Node.cpp”中我写道:#include"Node.h"virtualNode::Node()=0;此实现防止Node被另

c++ - 从基类调用重写函数?

我的问题可能最好用一个例子来解释。例如,我有2个类:一个基类和一个派生类:classbaseClass{public:baseClass(){foo();}virtualboolfoo(){printf("baseClass");returnfalse;}};classderivedClass:publicbaseClass{public:boolfoo(){printf("derivedClass");returntrue;}};当我创建derivedClass的实例时,baseClass中的构造函数将被调用,并且foo()将从它的构造函数中调用.问题是,baseClass的构造函数

c++ - 您可以覆盖基类中定义的私有(private)函数吗?

我相信,派生类只能覆盖它从基类继承的那些函数。我的理解对吗?也就是说,如果基类有一个公共(public)成员函数func,那么派生类可以覆盖成员函数func。但是如果基类有一个私有(private)成员函数foo,那么派生类就不能覆盖成员函数foo。我说的对吗?编辑在研究了SO成员给出的答案后,我想出了一个代码示例。我提到了我在代码中作为注释研究的要点。希望我是对的。谢谢/*Pointstoponder:1.Irrespectiveoftheaccessspecifier,thememberfunctionscanbeoverrideinbaseclass.Butwecannotdir

c++ - 基类指针与继承类指针?

假设我有一个继承自Animal类的Dog类。这两行代码有什么区别?Animal*a=newDog();Dog*d=newDog();一种是指向基类的指针,另一种是指向派生类的指针。但这种区别何时会变得重要?对于多态性,两者的工作方式完全相同,对吧? 最佳答案 为了类型检查的所有目的,编译器对待a就好像它可以指向任何动物,即使你知道它指向一只狗:你不能通过a到一个期待Dog*的函数.你做不到a->fetchStick(),其中fetchStick是Dog的成员函数但不是Animal.Dog*d2=dynamic_cast(d)可能只是

c++ - 为什么当派生类调用基类的纯虚函数时 g++ 不报错?

我有一个带有纯虚函数f()的类Base。另一个类Derived派生自Base。我从Derived中调用f()。使用g++,我从链接器中得到一个错误。[agnel@dookutmp]$g++pure_virtual_function_call.cpp/tmp/ccGQLHi4.o:Infunction`Derived::f()':pure_virtual_function_call.cpp:(.text._ZN7Derived1fEv[_ZN7Derived1fEv]+0x14):undefinedreferenceto`VirtualBase::f()'collect2:error:l

c++ - 为什么派生类的大小包括来自基类的私有(private)成员?

我有以下代码:classA{private:inti;};classB:publicA{private:intj;};当我检查sizeof(B)时,它似乎是sizeof(base)+sizeof(derived)。但是,我对继承的理解是,基类的private成员不被继承。为什么它们包含在sizeof(B)的结果中? 最佳答案 所有成员变量都是继承的。privateprotectedpublic修饰符只会改变那些访问这些变量的人 关于c++-为什么派生类的大小包括来自基类的私有(priva

c++ - 我们在A(派生类) "is a"B(基类)时使用继承。当A "can be"B或C时我们怎么办?

抱歉提出这个丑陋的问题,但我不知道该如何表达。我将举例说明我的意思:人类可以是法师也可以是战士,所以法师和战士可以继承人类。但是,如果Orc也可以兼而有之呢?我们不能说“人是战士”或“战士是人”。Orc和Human(或者一个父类,Humanoid)是否继承了所有的技能,然后选择使用什么?我不知道是否应该标记特定语言,因为这是关于oop的一般性问题,但由于不同的语言对同一问题可能有不同的方法,所以我更喜欢从C++的角度来回答。 最佳答案 改进您的建模抽象类种族,具体类人类、兽人等...抽象类Class,具体类Mage、Warrior等

c++ - 为什么 std::shared_ptr 从基类和派生类调用析构函数,而 delete 只调用基类的析构函数?

这个问题在这里已经有了答案:Howisitpossible(ifitis)toimplementshared_ptrwithoutrequiringpolymorphicclassestohavevirtualdestructor?(3个答案)关闭8年前。为什么在使用std::shared_ptr释放时从基类和派生类调用析构函数,而第二个示例仅从基类调用析构函数?classBase{public:~Base(){std::coutsharedA(newDerived);}std::cout输出:--------------------DeriveddestructorBasedestr

c++ - 基类复制构造函数的可见性问题

我有一个类(暂时称它为base),它有一个protected接口(interface),包括protected构造函数等。base的一些功能|返回base的一个实例按值(value):classbase{protected:base(){}base(baseconst&other){}//line6basefoo(){baseret;returnret;}};这些函数被包装在派生类中以返回派生类型,如下所示:classderived:publicbase{private:derived(baseconst&b):base(b){}public:derived():base(){}der